home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / HOTKEY.PAK / HOTKEYX.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  3KB  |  119 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1995, 1995 by Borland International, All Rights Reserved
  4. //
  5. // Illustrates usage of THotKey class
  6. //----------------------------------------------------------------------------
  7. #include <owl/pch.h>
  8. #include <owl/hotkey.h>
  9. #include <owl/inputdia.h>
  10. #include "hotkey.h"
  11.  
  12. #if !defined(WM_SETHOTKEY)        
  13. # define WM_SETHOTKEY  0x0032
  14. #endif
  15.  
  16. //
  17. // Class TClientWindow
  18. // ~~~~~ ~~~~~~~~~~~~~
  19. class TClientWindow : public TWindow {
  20.  
  21.     // Simple structure used when performing transfers between
  22.     // the configure dialog and the client window.
  23.     //
  24.     struct {
  25.       uint16 hotkey;
  26.     } xferData;
  27.  
  28.   public:
  29.     TClientWindow(TWindow* parent= 0);
  30.  
  31.   protected:
  32.  
  33.     // Message Handlers
  34.     //
  35.     void        ConfigureHotKey();
  36.  
  37.   DECLARE_RESPONSE_TABLE(TClientWindow);
  38. };
  39.  
  40. DEFINE_RESPONSE_TABLE1(TClientWindow, TWindow)
  41.   EV_COMMAND(IDM_HOTKEY, ConfigureHotKey),
  42. END_RESPONSE_TABLE;
  43.  
  44.  
  45. TClientWindow::TClientWindow(TWindow* parent)
  46. :
  47.   TWindow(parent)
  48. {
  49.   xferData.hotkey = 0;
  50.   Attr.Style |= (WS_CLIPSIBLINGS|WS_CLIPCHILDREN);
  51. }
  52.  
  53. void
  54. TClientWindow::ConfigureHotKey()
  55. {
  56.   TDialog dlg(this, IDD_HOTKEYDLG);
  57.   new THotKey(&dlg, IDC_HOTKEY);
  58.   dlg.SetTransferBuffer(&xferData);
  59.  
  60.   // If successful set a HOTKEY for the application's main window
  61.   // NOTE: HOTKEYs cannot be set for windows with the WS_CHILD still.
  62.   //       Hence, the client window is not a valid target for HOTKEYs.
  63.   //
  64.   if (dlg.Execute() == IDOK && xferData.hotkey) {
  65.     LRESULT rslt = GetApplication()->GetMainWindow()->SendMessage(WM_SETHOTKEY,
  66.                                                                   xferData.hotkey);
  67.     // Inform user of the status of the attempt to set a HOTKEY
  68.     //
  69.     switch(rslt) {
  70.       case 2: MessageBox("Hot key previously assigned", "INFO");
  71.               break;
  72.  
  73.       case 1: MessageBox("Hot key successfully assigned\n"
  74.                          "Pressing the hotkey will now activate\n"
  75.                          "this application's main window", "INFO");
  76.               break;
  77.  
  78.       case 0: MessageBox("Invalid window for hot key", "INFO");
  79.               break;
  80.  
  81.       case -1: MessageBox("Invalid hot key", "INFO");
  82.                break;
  83.  
  84.       default: MessageBox("Unknown error setting hot key", "INFO");
  85.                break;
  86.     }
  87.   }
  88. }
  89.  
  90. //----------------------------------------------------------------------------
  91.  
  92. //
  93. // Class TSampleApp
  94. // ~~~~~ ~~~~~~~~~~
  95. class TSampleApp : public TApplication {
  96.   public:
  97.     void InitMainWindow();
  98. };
  99.  
  100. void
  101. TSampleApp::InitMainWindow()
  102. {
  103.   SetMainWindow(new TFrameWindow(0, 0, new TClientWindow()));
  104.   GetMainWindow()->AssignMenu(ID_APPMENU);
  105. }
  106.  
  107. int
  108. OwlMain(int /*argc*/, char* /*argv*/[])
  109. {
  110. #if defined(BI_PLAT_WIN16)
  111.   if (!TSystem::IsWin95()) {
  112.     ::MessageBox(0, "16-bit hotkey example designed to run on only Windows 95",
  113.                  "Error", MB_ICONSTOP | MB_OK);
  114.     return -1;
  115.   }
  116. #endif
  117.   return TSampleApp().Run();
  118. }
  119.